21.4 Zugriff auf die Subfenster  
21.4.1 Zugriff auf alle Subfenster  
Sehen Sie sich noch einmal die Anweisung an, mit der neue Subfenster erstellt und angezeigt werden:
| Dim frm As SubForm = New SubForm()
|
| frm.MdiParent = Me
|
| frm.Show()
|
Wird das erste Subfenster erzeugt, kann dieses mit frm angesprochen werden. Mit dem Erzeugen des zweiten Subfensters wird die Objektvariable frm »umgebogen« und zeigt auf die Startadresse des zweiten Subfensters. Das erste wird zwar unter frm nicht mehr referenziert, ist aber dennoch weiterhin im Hauptfenster zu sehen, weil das Objekt nicht zerstört worden ist. Jetzt stellt sich natürlich die Frage, wie auf die einzelnen Subfenster zugegriffen werden kann.
Es erstaunt sicherlich nicht, dass die Referenzen aller geöffneten Subfenster in einem Array verwaltet werden. Dieses Array kann über die Eigenschaft MdiChildren des MDI-Hauptfensters ausgewertet werden.
| Public ReadOnly Property MdiChildren As Form()
|
Die Eigenschaft bietet sich auch dann an, wenn auf alle Subfenster dieselben Operationen ausgeführt werden müssen – beispielsweise um die darin enthaltenen Daten vor dem Schließen der Anwendung zu speichern.
Öffnet der Anwender die Subfenster Dokument1 ... Dokument10 und schließt ein oder mehrere, z. B. Dokument2 und Dokument7, hinterlässt dieses Array keine unbelegten Indizes und kann deshalb vom ersten bis zum letzten Index durchlaufen werden:
| For i As Integer = 0 To Me.MdiChildren.Length – 1
|
| ...
|
| Next
|
Die Überprüfung, ob der sich aktuell im Zugriff befindliche Index den Inhalt null aufweist, ist deshalb nicht notwendig.
21.4.2 Zugriff auf das aktive Subfenster  
In der Menüleiste eines MDI-Hauptfensters findet man normalerweise immer die Menüpunkte Speichern und Speichern unter..., um die Eingaben im aktiven Subfenster zu sichern. Mit der Eigenschaft ActiveMdiChild des MDI-Hauptfensters können Sie sich dazu die Referenz auf das aktivierte MDI-Subfenster besorgen:
| Public ReadOnly Property ActiveMdiChild As Form
|
Nehmen wir an, dass das Subfenster eine Textbox enthält, deren Eigenschaft MultiLine=True gesetzt ist und, wie üblich bei einem Dokumentenfenster, den gesamten Clientbereich des Subfensters einnimmt. Mit
| Dim frm As SubForm = Me.ActiveMdiChild
|
besorgen Sie sich die Referenz auf das aktive Subfenster.
Abhängig davon, unter welchen Rahmenbedingungen Sie auf ActiveMdiChild zugreifen, kann es erforderlich sein zu prüfen, ob überhaupt ein Subfenster geöffnet ist. Wenn aktuell kein MDI-Subfenster geöffnet ist, liefert die Eigenschaft ActiveMdiChild Nothing zurück. Das sollten Sie daher zuvor unbedingt prüfen.
| If Me.ActiveMdiChild IsNot Nothing Then
|
| Dim frm As SubForm = Me.ActiveMdiChild
|
| frm.textBox1.Text = "......."
|
| End If
|
|